import { patch } from "./patch.js";
import watcher from '../observe/watcher.js'

export const mouentComponent = function(vm, el){
  callHook(vm, "beforeMount")// 此处执行生命周期函数beforeMount
  const updateComponent = () => {
    vm._update(vm._render());
  }
  new watcher(vm, updateComponent, () => {}, true);
  callHook(vm, "mounted")// 此处执行生命周期函数mounted
}

export function lifecycleMixin(Vue){
  Vue.prototype._update = function(vnode){ // vnode => 真实dom
    let vm = this;
    vm.$el = patch(vm.$el, vnode); // 重新赋值为当前的新创建的元素 否则旧元素删除后将无法获取父元素 这里是全局替换 也就是app下的所有元素
  }
}

// 生命周期调用
export function callHook(vm, hook){
  const handlers = vm.$options[hook]
  if(handlers){
    for (let index = 0; index < handlers.length; index++) {
      handlers[index].call(this); // 改变生命周期的this指向
    }
  }
}